As computers become more commonplace, an ever-increasing number of functionalities are incorporated into a single computer system. Often, the additional functionality is provided by attaching an external device to the computer system. In turn, the external device communicates with the computer system to provide the additional functionality.
The Universal serial bus (USB) has become a standard communication channel for connecting external devices to a computer system. USB allows a number of devices to be connected to a same computer system simultaneously, while providing relatively high bandwidth. For example, the latest commonly available version of USB (e.g., USB 2.0) can transfer up to 480 Mbps (mega bits per second).
Vendors who provide USB devices are generally required to provide device drivers to enable access to these devices. Commonly, a device driver is a program and set of data that allows a computer system to access the device (e.g., read data from the device, write data to the device, send commands to the device, and receive status data from the device).
Currently, most USB device vendors are required to provide kernel-mode device drivers for their devices. Generally, a kernel is the central part of an operating system (OS) which remains active and in control of a computer system while the OS is running. For example, the kernel provides the necessary services (such as memory and process management) to the computer system. As a result, kernel-mode drivers can easily cause an unrecoverable system-wide crash in the event of the smallest of malfunctions (or bugs). Additionally, implementing USB drivers in kernel-mode necessitates investment of time and energy in programming complicated kernel-mode drivers, in addition to extra hardware or software required for testing the kernel-mode driver. Furthermore, when upgrading an OS, incompatible or outdated kernel-mode device driver may cause a crash and prevent a successful system upgrade.